1. Field of the Invention
The present invention relates to the field of database management, and, more specifically, to presenting a query to a database expressed in terms of an object model.
2. Description of the Prior Art
Data that is stored in a database may be modeled according to an object model. The object model includes objects that each have a unique identifier. An object can be categorized by its type. All elements of a given type have a common set of properties and a common set of defined operations. The state of an object is defined by the values it carries for its set of properties. Properties can be either “primitive” properties or “link” properties. Primitive properties are properties of the object itself. Link properties are relationships between the object and one or more other objects. Typically, the values of an object's properties can change over time.
Some existing query languages enable a user to run queries on data that is stored in a database and modeled according to an object model. Such “object model” query languages have been designed with syntax that is similar to structured query language (SQL), which is used to query relational databases. Designing such an object model query language with such similar syntax as SQL makes the language more intuitive and familiar to the author of a query. Specifically, such an object model query language may include a “select” statement, a “from” statement, and a “where” statement. The select statement identifies the type of objects to be retrieved. The “from” statement identifies the objects from which the type is selected. The “where” statement is a predicate identifying a condition of a property of the selected object type that must be satisfied. Such object model query languages may also include dot expressions. Dot expressions are used to identify a property of an object. Dot expressions may identify either a primitive property or a link property.
Although such existing queries including three instructions may be intuitive and familiar to a query author, such queries may often be long and complex. The length and complexity of a query is increased when the query includes multiple link properties. Such queries including multiple link properties may have multiple dot expressions in each of the three statements. The length and complexity of object queries would be greatly reduced if, rather than including three instructions, object queries included only two instructions; a first instruction identifying a type of objects and a second instruction identifying selected objects of the identified type to be retrieved.
Furthermore, existing object model query languages are limited in that they enable a query author to identify only a single type of object to be retrieved. It is often desirable to retrieve not only a single object type, but to retrieve a specified object type and all related object types. For example, an existing object query requesting “all customers that live in California” will retrieve only “customer” objects that have related address objects with a state property equal to California. However, a query author may wish to retrieve not only “customer” objects but also the related “address” object and possibly other related objects. In existing object model query languages, a query author wishing to retrieve multiple object types must issue multiple queries. Thus, the effectiveness of object queries could be vastly improved by enabling a query author to identify a specified object type and multiple related object types to be retrieved.